Circuit Breaker Pattern হল একটি গুরুত্বপূর্ণ ডিজাইন প্যাটার্ন, যা ডিস্ট্রিবিউটেড সিস্টেমে ফেইলিওর হ্যান্ডল করার জন্য ব্যবহৃত হয়। এটি একটি নির্দিষ্ট সময়ের জন্য ব্যর্থ সার্ভিস কলগুলিকে ব্লক করে এবং সার্ভিস রিকভারির সময় পুনরায় চেষ্টা করতে দেয়। Spring Boot-এ Resilience4j একটি জনপ্রিয় লাইব্রেরি যা Circuit Breaker Pattern বাস্তবায়ন করার জন্য ব্যবহৃত হয়।
নিচে একটি উদাহরণসহ Circuit Breaker Pattern Spring Boot ক্লায়েন্টে কিভাবে ব্যবহার করবেন তা দেখানো হলো।
Spring Boot-এ Resilience4j ব্যবহার করার জন্য Maven ডিপেনডেন্সি যোগ করুন।
<dependency>
<groupId>io.github.resilience4j</groupId>
<artifactId>resilience4j-spring-boot2</artifactId>
<version>1.7.1</version>
</dependency>
Circuit Breaker-এর জন্য কনফিগারেশন সেট করুন।
resilience4j.circuitbreaker.instances.myService.register-health-indicator=true
resilience4j.circuitbreaker.instances.myService.sliding-window-size=5
resilience4j.circuitbreaker.instances.myService.failure-rate-threshold=50
resilience4j.circuitbreaker.instances.myService.wait-duration-in-open-state=5000
resilience4j.circuitbreaker.instances.myService.permitted-number-of-calls-in-half-open-state=3
বিবরণ:
failure-rate-threshold
: ব্যর্থতার হার, যা Circuit Breaker ওপেন করবে। (%)wait-duration-in-open-state
: কতক্ষণ ওপেন অবস্থায় থাকবে। (মিলিসেকেন্ড)sliding-window-size
: সর্বশেষ কতটি রিকোয়েস্ট পর্যবেক্ষণ করবে।permitted-number-of-calls-in-half-open-state
: হাফ-ওপেন অবস্থায় অনুমোদিত কলের সংখ্যা।Resilience4j এর Circuit Breaker-টি Spring Boot-এর @CircuitBreaker
এনোটেশন ব্যবহার করে সহজেই বাস্তবায়ন করা যায়।
import io.github.resilience4j.circuitbreaker.annotation.CircuitBreaker;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
@Service
public class ApiService {
private final RestTemplate restTemplate;
public ApiService(RestTemplate restTemplate) {
this.restTemplate = restTemplate;
}
@CircuitBreaker(name = "myService", fallbackMethod = "fallbackForFetchData")
public String fetchData() {
String url = "https://api.example.com/data";
return restTemplate.getForObject(url, String.class);
}
// ফেইলিওর হলে এখানে আসবে
public String fallbackForFetchData(Throwable throwable) {
return "Fallback response: Service is currently unavailable.";
}
}
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
@Configuration
public class RestTemplateConfig {
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ApiController {
private final ApiService apiService;
public ApiController(ApiService apiService) {
this.apiService = apiService;
}
@GetMapping("/data")
public String getData() {
return apiService.fetchData();
}
}
fetchData()
কাজ করবে।fallbackForFetchData()
মেথড কল হবে।Success Case:
{
"data": "Actual data from API"
}
Fallback Case:
{
"data": "Fallback response: Service is currently unavailable."
}
Circuit Breaker Pattern:
Resilience4j Spring Boot-এর সাথে Circuit Breaker বাস্তবায়নের জন্য সহজ এবং শক্তিশালী সমাধান।
Read more